<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Eigen: Geometry module</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="eigendoxy.css" rel="stylesheet" type="text/css">
<!--  -->
<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="Eigen_Silly_Professor_64x64.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname"><a href="http://eigen.tuxfamily.org">Eigen</a>
   &#160;<span id="projectnumber">3.4.90 (git rev 67eeba6e720c5745abc77ae6c92ce0a44aa7b7ae)</span>
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.svg"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__Geometry__Module.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#groups">Modules</a> &#124;
<a href="#nested-classes">Classes</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Geometry module<div class="ingroups"><a class="el" href="group__Geometry__chapter.html">Geometry</a> &raquo; <a class="el" href="group__Geometry__Reference.html">Reference</a></div></div>  </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>This module provides support for:</p><ul>
<li>fixed-size homogeneous transformations</li>
<li>translation, scaling, 2D and 3D rotations</li>
<li><a class="el" href="classEigen_1_1Quaternion.html">quaternions </a></li>
<li>cross products (<a class="el" href="group__Geometry__Module.html#ga0024b44eca99cb7135887c2aaf319d28">MatrixBase::cross</a>, <a class="el" href="group__Geometry__Module.html#gabde56e2a0baba550815a0b05139e4d42">MatrixBase::cross3</a>)</li>
<li>orthognal vector generation (<a class="el" href="group__Geometry__Module.html#gaa0dc2c32a9379eeb2b4c4a05c1a6fe52">MatrixBase::unitOrthogonal</a>)</li>
<li>some linear components: <a class="el" href="classEigen_1_1ParametrizedLine.html">parametrized-lines </a> and <a class="el" href="classEigen_1_1Hyperplane.html">hyperplanes </a></li>
<li><a class="el" href="classEigen_1_1AlignedBox.html">axis aligned bounding boxes </a></li>
<li><a class="el" href="group__Geometry__Module.html#gab3f5a82a24490b936f8694cf8fef8e60">least-square transformation fitting </a></li>
</ul>
<div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span></div>
</div><!-- fragment --> <table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
Modules</h2></td></tr>
<tr class="memitem:group__alignedboxtypedefs"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__alignedboxtypedefs.html">Global aligned box typedefs</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1AlignedBox.html">Eigen::AlignedBox&lt; Scalar_, AmbientDim_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An axis aligned box.  <a href="classEigen_1_1AlignedBox.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1AngleAxis.html">Eigen::AngleAxis&lt; Scalar_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a 3D rotation as a rotation angle around an arbitrary 3D axis.  <a href="classEigen_1_1AngleAxis.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1Homogeneous.html">Eigen::Homogeneous&lt; MatrixType, Direction_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Expression of one (or a set of) homogeneous vector(s)  <a href="classEigen_1_1Homogeneous.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1Hyperplane.html">Eigen::Hyperplane&lt; Scalar_, AmbientDim_, Options_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A hyperplane.  <a href="classEigen_1_1Hyperplane.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1Map_3_01const_01Quaternion_3_01Scalar___01_4_00_01Options___01_4.html">Eigen::Map&lt; const Quaternion&lt; Scalar_ &gt;, Options_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classEigen_1_1Quaternion.html" title="The quaternion class used to represent 3D orientations and rotations.">Quaternion</a> expression mapping a constant memory buffer.  <a href="classEigen_1_1Map_3_01const_01Quaternion_3_01Scalar___01_4_00_01Options___01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1Map_3_01Quaternion_3_01Scalar___01_4_00_01Options___01_4.html">Eigen::Map&lt; Quaternion&lt; Scalar_ &gt;, Options_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Expression of a quaternion from a memory buffer.  <a href="classEigen_1_1Map_3_01Quaternion_3_01Scalar___01_4_00_01Options___01_4.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1ParametrizedLine.html">Eigen::ParametrizedLine&lt; Scalar_, AmbientDim_, Options_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A parametrized line.  <a href="classEigen_1_1ParametrizedLine.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1Quaternion.html">Eigen::Quaternion&lt; Scalar_, Options_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The quaternion class used to represent 3D orientations and rotations.  <a href="classEigen_1_1Quaternion.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1QuaternionBase.html">Eigen::QuaternionBase&lt; Derived &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class for quaternion expressions.  <a href="classEigen_1_1QuaternionBase.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1Rotation2D.html">Eigen::Rotation2D&lt; Scalar_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a rotation/orientation in a 2 dimensional space.  <a href="classEigen_1_1Rotation2D.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1Transform.html">Eigen::Transform&lt; Scalar_, Dim_, Mode_, Options_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents an homogeneous transformation in a N dimensional space.  <a href="classEigen_1_1Transform.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1Translation.html">Eigen::Translation&lt; Scalar_, Dim_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a translation transformation.  <a href="classEigen_1_1Translation.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1UniformScaling.html">Eigen::UniformScaling&lt; Scalar_ &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a generic uniform scaling transformation.  <a href="classEigen_1_1UniformScaling.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gaed936d6e9192d97f00a9608081fa9b64"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1AngleAxis.html">AngleAxis</a>&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gaed936d6e9192d97f00a9608081fa9b64">Eigen::AngleAxisd</a></td></tr>
<tr class="separator:gaed936d6e9192d97f00a9608081fa9b64"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad823b9c674644b14d950fbfe165dfdbf"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1AngleAxis.html">AngleAxis</a>&lt; float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gad823b9c674644b14d950fbfe165dfdbf">Eigen::AngleAxisf</a></td></tr>
<tr class="separator:gad823b9c674644b14d950fbfe165dfdbf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5daab8e66aa480465000308455578830"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga5daab8e66aa480465000308455578830">Eigen::Quaterniond</a></td></tr>
<tr class="separator:ga5daab8e66aa480465000308455578830"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga66aa915a26d698c60ed206818c3e4c9b"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt; float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga66aa915a26d698c60ed206818c3e4c9b">Eigen::Quaternionf</a></td></tr>
<tr class="separator:ga66aa915a26d698c60ed206818c3e4c9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4289f38cc6ecf302e07d2365abc6a902"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1Map.html">Map</a>&lt; <a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt; double &gt;, <a class="el" href="group__enums.html#gga45fe06e29902b7a2773de05ba27b47a1ae12d0f8f869c40c76128260af2242bc8">Aligned</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga4289f38cc6ecf302e07d2365abc6a902">Eigen::QuaternionMapAlignedd</a></td></tr>
<tr class="separator:ga4289f38cc6ecf302e07d2365abc6a902"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadaf7f3ee984d9828ca94d66355f0b226"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1Map.html">Map</a>&lt; <a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt; float &gt;, <a class="el" href="group__enums.html#gga45fe06e29902b7a2773de05ba27b47a1ae12d0f8f869c40c76128260af2242bc8">Aligned</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gadaf7f3ee984d9828ca94d66355f0b226">Eigen::QuaternionMapAlignedf</a></td></tr>
<tr class="separator:gadaf7f3ee984d9828ca94d66355f0b226"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga89412d1dcf23537e5990dfb3089ace76"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1Map.html">Map</a>&lt; <a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt; double &gt;, 0 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga89412d1dcf23537e5990dfb3089ace76">Eigen::QuaternionMapd</a></td></tr>
<tr class="separator:ga89412d1dcf23537e5990dfb3089ace76"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga867ff508ac860bdf7cab3b8a8fc1048d"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1Map.html">Map</a>&lt; <a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt; float &gt;, 0 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga867ff508ac860bdf7cab3b8a8fc1048d">Eigen::QuaternionMapf</a></td></tr>
<tr class="separator:ga867ff508ac860bdf7cab3b8a8fc1048d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab7af1ccdfb6c865c27fe1fd6bd9e759f"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1Rotation2D.html">Rotation2D</a>&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gab7af1ccdfb6c865c27fe1fd6bd9e759f">Eigen::Rotation2Dd</a></td></tr>
<tr class="separator:gab7af1ccdfb6c865c27fe1fd6bd9e759f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga35e2cace3ada497794734edb8bc33b6e"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classEigen_1_1Rotation2D.html">Rotation2D</a>&lt; float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga35e2cace3ada497794734edb8bc33b6e">Eigen::Rotation2Df</a></td></tr>
<tr class="separator:ga35e2cace3ada497794734edb8bc33b6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga0024b44eca99cb7135887c2aaf319d28"><td class="memTemplParams" colspan="2">template&lt;typename OtherDerived &gt; </td></tr>
<tr class="memitem:ga0024b44eca99cb7135887c2aaf319d28"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classEigen_1_1DenseBase.html#a3646a8e8b76ac3023e8e1b1340fc8238">PlainObject</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga0024b44eca99cb7135887c2aaf319d28">Eigen::MatrixBase&lt; Derived &gt;::cross</a> (const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; OtherDerived &gt; &amp;other) const</td></tr>
<tr class="separator:ga0024b44eca99cb7135887c2aaf319d28"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2fe1a2a012ce0ab0e8da6af134073039"><td class="memTemplParams" colspan="2">template&lt;typename OtherDerived &gt; </td></tr>
<tr class="memitem:ga2fe1a2a012ce0ab0e8da6af134073039"><td class="memTemplItemLeft" align="right" valign="top">const CrossReturnType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga2fe1a2a012ce0ab0e8da6af134073039">Eigen::VectorwiseOp&lt; ExpressionType, Direction &gt;::cross</a> (const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; OtherDerived &gt; &amp;other) const</td></tr>
<tr class="separator:ga2fe1a2a012ce0ab0e8da6af134073039"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabde56e2a0baba550815a0b05139e4d42"><td class="memTemplParams" colspan="2">template&lt;typename OtherDerived &gt; </td></tr>
<tr class="memitem:gabde56e2a0baba550815a0b05139e4d42"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classEigen_1_1DenseBase.html#a3646a8e8b76ac3023e8e1b1340fc8238">PlainObject</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gabde56e2a0baba550815a0b05139e4d42">Eigen::MatrixBase&lt; Derived &gt;::cross3</a> (const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; OtherDerived &gt; &amp;other) const</td></tr>
<tr class="separator:gabde56e2a0baba550815a0b05139e4d42"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga17994d2e81b723295f5bc3b1f862ed3b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classEigen_1_1Matrix.html">Matrix</a>&lt; <a class="el" href="classEigen_1_1DenseBase.html#a5feed465b3a8e60c47e73ecce83e39a2">Scalar</a>, 3, 1 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga17994d2e81b723295f5bc3b1f862ed3b">Eigen::MatrixBase&lt; Derived &gt;::eulerAngles</a> (<a class="el" href="structEigen_1_1EigenBase.html#a554f30542cc2316add4b1ea0a492ff02">Index</a> a0, <a class="el" href="structEigen_1_1EigenBase.html#a554f30542cc2316add4b1ea0a492ff02">Index</a> a1, <a class="el" href="structEigen_1_1EigenBase.html#a554f30542cc2316add4b1ea0a492ff02">Index</a> a2) const</td></tr>
<tr class="separator:ga17994d2e81b723295f5bc3b1f862ed3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadc0e3dd3510cb5a6e70aca9aab1cbf19"><td class="memItemLeft" align="right" valign="top">const HNormalizedReturnType&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gadc0e3dd3510cb5a6e70aca9aab1cbf19">Eigen::MatrixBase&lt; Derived &gt;::hnormalized</a> () const</td></tr>
<tr class="memdesc:gadc0e3dd3510cb5a6e70aca9aab1cbf19"><td class="mdescLeft">&#160;</td><td class="mdescRight">homogeneous normalization  <a href="group__Geometry__Module.html#gadc0e3dd3510cb5a6e70aca9aab1cbf19">More...</a><br /></td></tr>
<tr class="separator:gadc0e3dd3510cb5a6e70aca9aab1cbf19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1f220045efa302626c287088b63b6ba9"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classEigen_1_1CwiseBinaryOp.html">HNormalizedReturnType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#ga1f220045efa302626c287088b63b6ba9">Eigen::VectorwiseOp&lt; ExpressionType, Direction &gt;::hnormalized</a> () const</td></tr>
<tr class="memdesc:ga1f220045efa302626c287088b63b6ba9"><td class="mdescLeft">&#160;</td><td class="mdescRight">column or row-wise homogeneous normalization  <a href="group__Geometry__Module.html#ga1f220045efa302626c287088b63b6ba9">More...</a><br /></td></tr>
<tr class="separator:ga1f220045efa302626c287088b63b6ba9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf3229c2d3669e983075ab91f7f480cb1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classEigen_1_1Homogeneous.html">HomogeneousReturnType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gaf3229c2d3669e983075ab91f7f480cb1">Eigen::MatrixBase&lt; Derived &gt;::homogeneous</a> () const</td></tr>
<tr class="separator:gaf3229c2d3669e983075ab91f7f480cb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf99305a3d7432318236df7b80022df37"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classEigen_1_1Homogeneous.html">HomogeneousReturnType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gaf99305a3d7432318236df7b80022df37">Eigen::VectorwiseOp&lt; ExpressionType, Direction &gt;::homogeneous</a> () const</td></tr>
<tr class="separator:gaf99305a3d7432318236df7b80022df37"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab3f5a82a24490b936f8694cf8fef8e60"><td class="memTemplParams" colspan="2">template&lt;typename Derived , typename OtherDerived &gt; </td></tr>
<tr class="memitem:gab3f5a82a24490b936f8694cf8fef8e60"><td class="memTemplItemLeft" align="right" valign="top">internal::umeyama_transform_matrix_type&lt; Derived, OtherDerived &gt;::type&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gab3f5a82a24490b936f8694cf8fef8e60">Eigen::umeyama</a> (const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; Derived &gt; &amp;src, const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; OtherDerived &gt; &amp;dst, bool with_scaling=true)</td></tr>
<tr class="memdesc:gab3f5a82a24490b936f8694cf8fef8e60"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the transformation between two point sets.  <a href="group__Geometry__Module.html#gab3f5a82a24490b936f8694cf8fef8e60">More...</a><br /></td></tr>
<tr class="separator:gab3f5a82a24490b936f8694cf8fef8e60"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa0dc2c32a9379eeb2b4c4a05c1a6fe52"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classEigen_1_1DenseBase.html#a3646a8e8b76ac3023e8e1b1340fc8238">PlainObject</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Geometry__Module.html#gaa0dc2c32a9379eeb2b4c4a05c1a6fe52">Eigen::MatrixBase&lt; Derived &gt;::unitOrthogonal</a> (void) const</td></tr>
<tr class="separator:gaa0dc2c32a9379eeb2b4c4a05c1a6fe52"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Typedef Documentation</h2>
<a id="gaed936d6e9192d97f00a9608081fa9b64"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaed936d6e9192d97f00a9608081fa9b64">&#9670;&nbsp;</a></span>AngleAxisd</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1AngleAxis.html">AngleAxis</a>&lt;double&gt; <a class="el" href="group__Geometry__Module.html#gaed936d6e9192d97f00a9608081fa9b64">Eigen::AngleAxisd</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>double precision angle-axis type </p>

</div>
</div>
<a id="gad823b9c674644b14d950fbfe165dfdbf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad823b9c674644b14d950fbfe165dfdbf">&#9670;&nbsp;</a></span>AngleAxisf</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1AngleAxis.html">AngleAxis</a>&lt;float&gt; <a class="el" href="group__Geometry__Module.html#gad823b9c674644b14d950fbfe165dfdbf">Eigen::AngleAxisf</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>single precision angle-axis type </p>

</div>
</div>
<a id="ga5daab8e66aa480465000308455578830"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5daab8e66aa480465000308455578830">&#9670;&nbsp;</a></span>Quaterniond</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt;double&gt; <a class="el" href="group__Geometry__Module.html#ga5daab8e66aa480465000308455578830">Eigen::Quaterniond</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>double precision quaternion type </p>

</div>
</div>
<a id="ga66aa915a26d698c60ed206818c3e4c9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga66aa915a26d698c60ed206818c3e4c9b">&#9670;&nbsp;</a></span>Quaternionf</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt;float&gt; <a class="el" href="group__Geometry__Module.html#ga66aa915a26d698c60ed206818c3e4c9b">Eigen::Quaternionf</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>single precision quaternion type </p>

</div>
</div>
<a id="ga4289f38cc6ecf302e07d2365abc6a902"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4289f38cc6ecf302e07d2365abc6a902">&#9670;&nbsp;</a></span>QuaternionMapAlignedd</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1Map.html">Map</a>&lt;<a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt;double&gt;, <a class="el" href="group__enums.html#gga45fe06e29902b7a2773de05ba27b47a1ae12d0f8f869c40c76128260af2242bc8">Aligned</a>&gt; <a class="el" href="group__Geometry__Module.html#ga4289f38cc6ecf302e07d2365abc6a902">Eigen::QuaternionMapAlignedd</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p><a class="el" href="classEigen_1_1Map.html" title="A matrix or vector expression mapping an existing array of data.">Map</a> a 16-byte aligned array of double precision scalars as a quaternion </p>

</div>
</div>
<a id="gadaf7f3ee984d9828ca94d66355f0b226"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadaf7f3ee984d9828ca94d66355f0b226">&#9670;&nbsp;</a></span>QuaternionMapAlignedf</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1Map.html">Map</a>&lt;<a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt;float&gt;, <a class="el" href="group__enums.html#gga45fe06e29902b7a2773de05ba27b47a1ae12d0f8f869c40c76128260af2242bc8">Aligned</a>&gt; <a class="el" href="group__Geometry__Module.html#gadaf7f3ee984d9828ca94d66355f0b226">Eigen::QuaternionMapAlignedf</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p><a class="el" href="classEigen_1_1Map.html" title="A matrix or vector expression mapping an existing array of data.">Map</a> a 16-byte aligned array of single precision scalars as a quaternion </p>

</div>
</div>
<a id="ga89412d1dcf23537e5990dfb3089ace76"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga89412d1dcf23537e5990dfb3089ace76">&#9670;&nbsp;</a></span>QuaternionMapd</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1Map.html">Map</a>&lt;<a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt;double&gt;, 0&gt; <a class="el" href="group__Geometry__Module.html#ga89412d1dcf23537e5990dfb3089ace76">Eigen::QuaternionMapd</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p><a class="el" href="classEigen_1_1Map.html" title="A matrix or vector expression mapping an existing array of data.">Map</a> an unaligned array of double precision scalars as a quaternion </p>

</div>
</div>
<a id="ga867ff508ac860bdf7cab3b8a8fc1048d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga867ff508ac860bdf7cab3b8a8fc1048d">&#9670;&nbsp;</a></span>QuaternionMapf</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1Map.html">Map</a>&lt;<a class="el" href="classEigen_1_1Quaternion.html">Quaternion</a>&lt;float&gt;, 0&gt; <a class="el" href="group__Geometry__Module.html#ga867ff508ac860bdf7cab3b8a8fc1048d">Eigen::QuaternionMapf</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p><a class="el" href="classEigen_1_1Map.html" title="A matrix or vector expression mapping an existing array of data.">Map</a> an unaligned array of single precision scalars as a quaternion </p>

</div>
</div>
<a id="gab7af1ccdfb6c865c27fe1fd6bd9e759f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab7af1ccdfb6c865c27fe1fd6bd9e759f">&#9670;&nbsp;</a></span>Rotation2Dd</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1Rotation2D.html">Rotation2D</a>&lt;double&gt; <a class="el" href="group__Geometry__Module.html#gab7af1ccdfb6c865c27fe1fd6bd9e759f">Eigen::Rotation2Dd</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>double precision 2D rotation type </p>

</div>
</div>
<a id="ga35e2cace3ada497794734edb8bc33b6e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga35e2cace3ada497794734edb8bc33b6e">&#9670;&nbsp;</a></span>Rotation2Df</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="classEigen_1_1Rotation2D.html">Rotation2D</a>&lt;float&gt; <a class="el" href="group__Geometry__Module.html#ga35e2cace3ada497794734edb8bc33b6e">Eigen::Rotation2Df</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>single precision 2D rotation type </p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga0024b44eca99cb7135887c2aaf319d28"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0024b44eca99cb7135887c2aaf319d28">&#9670;&nbsp;</a></span>cross() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived &gt; </div>
<div class="memtemplate">
template&lt;typename OtherDerived &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; Derived &gt;::<a class="el" href="classEigen_1_1DenseBase.html#a3646a8e8b76ac3023e8e1b1340fc8238">PlainObject</a> <a class="el" href="classEigen_1_1MatrixBase.html">Eigen::MatrixBase</a>&lt; Derived &gt;::cross </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; OtherDerived &gt; &amp;&#160;</td>
          <td class="paramname"><em>other</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>the cross product of <code>*this</code> and <em>other</em> </dd></dl>
<p>Here is a very good explanation of cross-product: <a href="http://xkcd.com/199/">http://xkcd.com/199/</a></p>
<p>With complex numbers, the cross product is implemented as \( (\mathbf{a}+i\mathbf{b}) \times (\mathbf{c}+i\mathbf{d}) = (\mathbf{a} \times \mathbf{c} - \mathbf{b} \times \mathbf{d}) - i(\mathbf{a} \times \mathbf{d} - \mathbf{b} \times \mathbf{c})\)</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__Geometry__Module.html#gabde56e2a0baba550815a0b05139e4d42">MatrixBase::cross3()</a> </dd></dl>

</div>
</div>
<a id="ga2fe1a2a012ce0ab0e8da6af134073039"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2fe1a2a012ce0ab0e8da6af134073039">&#9670;&nbsp;</a></span>cross() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ExpressionType , int Direction&gt; </div>
<div class="memtemplate">
template&lt;typename OtherDerived &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classEigen_1_1VectorwiseOp.html">VectorwiseOp</a>&lt; ExpressionType, Direction &gt;::CrossReturnType <a class="el" href="classEigen_1_1VectorwiseOp.html">Eigen::VectorwiseOp</a>&lt; ExpressionType, Direction &gt;::cross </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; OtherDerived &gt; &amp;&#160;</td>
          <td class="paramname"><em>other</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>a matrix expression of the cross product of each column or row of the referenced expression with the <em>other</em> vector.</dd></dl>
<p>The referenced matrix must have one dimension equal to 3. The result matrix has the same dimensions than the referenced one.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__Geometry__Module.html#ga0024b44eca99cb7135887c2aaf319d28">MatrixBase::cross()</a> </dd></dl>

</div>
</div>
<a id="gabde56e2a0baba550815a0b05139e4d42"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabde56e2a0baba550815a0b05139e4d42">&#9670;&nbsp;</a></span>cross3()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived &gt; </div>
<div class="memtemplate">
template&lt;typename OtherDerived &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; Derived &gt;::<a class="el" href="classEigen_1_1DenseBase.html#a3646a8e8b76ac3023e8e1b1340fc8238">PlainObject</a> <a class="el" href="classEigen_1_1MatrixBase.html">Eigen::MatrixBase</a>&lt; Derived &gt;::cross3 </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; OtherDerived &gt; &amp;&#160;</td>
          <td class="paramname"><em>other</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>the cross product of <code>*this</code> and <em>other</em> using only the x, y, and z coefficients</dd></dl>
<p>The size of <code>*this</code> and <em>other</em> must be four. This function is especially useful when using 4D vectors instead of 3D ones to get advantage of SSE/AltiVec vectorization.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__Geometry__Module.html#ga0024b44eca99cb7135887c2aaf319d28">MatrixBase::cross()</a> </dd></dl>

</div>
</div>
<a id="ga17994d2e81b723295f5bc3b1f862ed3b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga17994d2e81b723295f5bc3b1f862ed3b">&#9670;&nbsp;</a></span>eulerAngles()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classEigen_1_1Matrix.html">Matrix</a>&lt; typename <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; Derived &gt;::<a class="el" href="classEigen_1_1DenseBase.html#a5feed465b3a8e60c47e73ecce83e39a2">Scalar</a>, 3, 1 &gt; <a class="el" href="classEigen_1_1MatrixBase.html">Eigen::MatrixBase</a>&lt; Derived &gt;::eulerAngles </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structEigen_1_1EigenBase.html#a554f30542cc2316add4b1ea0a492ff02">Index</a>&#160;</td>
          <td class="paramname"><em>a0</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structEigen_1_1EigenBase.html#a554f30542cc2316add4b1ea0a492ff02">Index</a>&#160;</td>
          <td class="paramname"><em>a1</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structEigen_1_1EigenBase.html#a554f30542cc2316add4b1ea0a492ff02">Index</a>&#160;</td>
          <td class="paramname"><em>a2</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>the Euler-angles of the rotation matrix <code>*this</code> using the convention defined by the triplet (<em>a0</em>,<em>a1</em>,<em>a2</em>)</dd></dl>
<p>Each of the three parameters <em>a0</em>,<em>a1</em>,<em>a2</em> represents the respective rotation axis as an integer in {0,1,2}. For instance, in: </p><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#ga5ec9ce2d8adbcd6888f3fbf2e1c095a4">Vector3f</a> ea = mat.eulerAngles(2, 0, 2); </div>
<div class="ttc" id="agroup__matrixtypedefs_html_ga5ec9ce2d8adbcd6888f3fbf2e1c095a4"><div class="ttname"><a href="group__matrixtypedefs.html#ga5ec9ce2d8adbcd6888f3fbf2e1c095a4">Eigen::Vector3f</a></div><div class="ttdeci">Matrix&lt; float, 3, 1 &gt; Vector3f</div><div class="ttdoc">3×1 vector of type float.</div><div class="ttdef"><b>Definition:</b> Matrix.h:500</div></div>
</div><!-- fragment --><p> "2" represents the z axis and "0" the x axis, etc. The returned angles are such that we have the following equality: </p><div class="fragment"><div class="line">mat == <a class="code" href="group__Geometry__Module.html#gad823b9c674644b14d950fbfe165dfdbf">AngleAxisf</a>(ea[0], <a class="code" href="classEigen_1_1MatrixBase.html#aabdcdeff1c822a5465fcbe1f78e5afe0">Vector3f::UnitZ</a>())</div>
<div class="line">     * <a class="code" href="group__Geometry__Module.html#gad823b9c674644b14d950fbfe165dfdbf">AngleAxisf</a>(ea[1], <a class="code" href="classEigen_1_1MatrixBase.html#a8a555b7cf626cced54670b98668c4e6d">Vector3f::UnitX</a>())</div>
<div class="line">     * <a class="code" href="group__Geometry__Module.html#gad823b9c674644b14d950fbfe165dfdbf">AngleAxisf</a>(ea[2], <a class="code" href="classEigen_1_1MatrixBase.html#aabdcdeff1c822a5465fcbe1f78e5afe0">Vector3f::UnitZ</a>()); </div>
<div class="ttc" id="aclassEigen_1_1MatrixBase_html_a8a555b7cf626cced54670b98668c4e6d"><div class="ttname"><a href="classEigen_1_1MatrixBase.html#a8a555b7cf626cced54670b98668c4e6d">Eigen::MatrixBase::UnitX</a></div><div class="ttdeci">static const BasisReturnType UnitX()</div><div class="ttdef"><b>Definition:</b> CwiseNullaryOp.h:932</div></div>
<div class="ttc" id="aclassEigen_1_1MatrixBase_html_aabdcdeff1c822a5465fcbe1f78e5afe0"><div class="ttname"><a href="classEigen_1_1MatrixBase.html#aabdcdeff1c822a5465fcbe1f78e5afe0">Eigen::MatrixBase::UnitZ</a></div><div class="ttdeci">static const BasisReturnType UnitZ()</div><div class="ttdef"><b>Definition:</b> CwiseNullaryOp.h:952</div></div>
<div class="ttc" id="agroup__Geometry__Module_html_gad823b9c674644b14d950fbfe165dfdbf"><div class="ttname"><a href="group__Geometry__Module.html#gad823b9c674644b14d950fbfe165dfdbf">Eigen::AngleAxisf</a></div><div class="ttdeci">AngleAxis&lt; float &gt; AngleAxisf</div><div class="ttdef"><b>Definition:</b> AngleAxis.h:159</div></div>
</div><!-- fragment --><p> This corresponds to the right-multiply conventions (with right hand side frames).</p>
<p>The returned angles are in the ranges [0:pi]x[-pi:pi]x[-pi:pi].</p>
<dl class="section see"><dt>See also</dt><dd>class <a class="el" href="classEigen_1_1AngleAxis.html" title="Represents a 3D rotation as a rotation angle around an arbitrary 3D axis.">AngleAxis</a> </dd></dl>

</div>
</div>
<a id="gadc0e3dd3510cb5a6e70aca9aab1cbf19"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadc0e3dd3510cb5a6e70aca9aab1cbf19">&#9670;&nbsp;</a></span>hnormalized() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; Derived &gt;::HNormalizedReturnType <a class="el" href="classEigen_1_1MatrixBase.html">Eigen::MatrixBase</a>&lt; Derived &gt;::hnormalized</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>homogeneous normalization </p>
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>a vector expression of the N-1 first coefficients of <code>*this</code> divided by that last coefficient.</dd></dl>
<p>This can be used to convert homogeneous coordinates to affine coordinates.</p>
<p>It is essentially a shortcut for: </p><div class="fragment"><div class="line">this-&gt;head(this-&gt;<a class="code" href="classEigen_1_1DenseCoeffsBase_3_01Derived_00_01DirectWriteAccessors_01_4.html#ae106171b6fefd3f7af108a8283de36c9">size</a>()-1)/this-&gt;<a class="code" href="classEigen_1_1DenseCoeffsBase_3_01Derived_00_01ReadOnlyAccessors_01_4.html#af51b00cc45490ad698239ab6a8b94393">coeff</a>(this-&gt;<a class="code" href="classEigen_1_1DenseCoeffsBase_3_01Derived_00_01DirectWriteAccessors_01_4.html#ae106171b6fefd3f7af108a8283de36c9">size</a>()-1);</div>
<div class="ttc" id="aclassEigen_1_1DenseCoeffsBase_3_01Derived_00_01DirectWriteAccessors_01_4_html_ae106171b6fefd3f7af108a8283de36c9"><div class="ttname"><a href="classEigen_1_1DenseCoeffsBase_3_01Derived_00_01DirectWriteAccessors_01_4.html#ae106171b6fefd3f7af108a8283de36c9">Eigen::DenseCoeffsBase&lt; Derived, DirectWriteAccessors &gt;::size</a></div><div class="ttdeci">EIGEN_CONSTEXPR Index size() const EIGEN_NOEXCEPT</div><div class="ttdef"><b>Definition:</b> EigenBase.h:69</div></div>
<div class="ttc" id="aclassEigen_1_1DenseCoeffsBase_3_01Derived_00_01ReadOnlyAccessors_01_4_html_af51b00cc45490ad698239ab6a8b94393"><div class="ttname"><a href="classEigen_1_1DenseCoeffsBase_3_01Derived_00_01ReadOnlyAccessors_01_4.html#af51b00cc45490ad698239ab6a8b94393">Eigen::DenseCoeffsBase&lt; Derived, ReadOnlyAccessors &gt;::coeff</a></div><div class="ttdeci">CoeffReturnType coeff(Index row, Index col) const</div><div class="ttdef"><b>Definition:</b> DenseCoeffsBase.h:99</div></div>
</div><!-- fragment --><p>Example: </p><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#ga9b2fcb53776a2829871f8a49009bef0b">Vector4d</a> v = <a class="code" href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Vector4d::Random</a>();</div>
<div class="line">Projective3d P(<a class="code" href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Matrix4d::Random</a>());</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;v                   = &quot;</span> &lt;&lt; v.transpose() &lt;&lt; <span class="stringliteral">&quot;]^T&quot;</span> &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;v.hnormalized()     = &quot;</span> &lt;&lt; v.hnormalized().transpose() &lt;&lt; <span class="stringliteral">&quot;]^T&quot;</span> &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;P*v                 = &quot;</span> &lt;&lt; (P*v).<a class="code" href="classEigen_1_1DenseBase.html#a43cbcd866a0737eb56642c2e992f0afd">transpose</a>() &lt;&lt; <span class="stringliteral">&quot;]^T&quot;</span> &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;(P*v).hnormalized() = &quot;</span> &lt;&lt; (P*v).<a class="code" href="group__Geometry__Module.html#gadc0e3dd3510cb5a6e70aca9aab1cbf19">hnormalized</a>().transpose() &lt;&lt; <span class="stringliteral">&quot;]^T&quot;</span> &lt;&lt; endl;</div>
<div class="ttc" id="aclassEigen_1_1DenseBase_html_a43cbcd866a0737eb56642c2e992f0afd"><div class="ttname"><a href="classEigen_1_1DenseBase.html#a43cbcd866a0737eb56642c2e992f0afd">Eigen::DenseBase::transpose</a></div><div class="ttdeci">TransposeReturnType transpose()</div><div class="ttdef"><b>Definition:</b> Transpose.h:184</div></div>
<div class="ttc" id="aclassEigen_1_1DenseBase_html_ae814abb451b48ed872819192dc188c19"><div class="ttname"><a href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Eigen::DenseBase::Random</a></div><div class="ttdeci">static const RandomReturnType Random()</div><div class="ttdef"><b>Definition:</b> Random.h:114</div></div>
<div class="ttc" id="agroup__Geometry__Module_html_gadc0e3dd3510cb5a6e70aca9aab1cbf19"><div class="ttname"><a href="group__Geometry__Module.html#gadc0e3dd3510cb5a6e70aca9aab1cbf19">Eigen::MatrixBase::hnormalized</a></div><div class="ttdeci">const HNormalizedReturnType hnormalized() const</div><div class="ttdoc">homogeneous normalization</div><div class="ttdef"><b>Definition:</b> Homogeneous.h:176</div></div>
<div class="ttc" id="agroup__matrixtypedefs_html_ga9b2fcb53776a2829871f8a49009bef0b"><div class="ttname"><a href="group__matrixtypedefs.html#ga9b2fcb53776a2829871f8a49009bef0b">Eigen::Vector4d</a></div><div class="ttdeci">Matrix&lt; double, 4, 1 &gt; Vector4d</div><div class="ttdoc">4×1 vector of type double.</div><div class="ttdef"><b>Definition:</b> Matrix.h:501</div></div>
</div><!-- fragment --><p> Output: </p><pre class="fragment">v                   =   0.68 -0.211  0.566  0.597]^T
v.hnormalized()     =   1.14 -0.354  0.949]^T
P*v                 = 0.663 -0.16 -0.13  0.91]^T
(P*v).hnormalized() =  0.729 -0.176 -0.143]^T
</pre><dl class="section see"><dt>See also</dt><dd><a class="el" href="group__Geometry__Module.html#ga1f220045efa302626c287088b63b6ba9" title="column or row-wise homogeneous normalization">VectorwiseOp::hnormalized()</a> </dd></dl>

</div>
</div>
<a id="ga1f220045efa302626c287088b63b6ba9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1f220045efa302626c287088b63b6ba9">&#9670;&nbsp;</a></span>hnormalized() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ExpressionType , int Direction&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classEigen_1_1VectorwiseOp.html">VectorwiseOp</a>&lt; ExpressionType, Direction &gt;::<a class="el" href="classEigen_1_1CwiseBinaryOp.html">HNormalizedReturnType</a> <a class="el" href="classEigen_1_1VectorwiseOp.html">Eigen::VectorwiseOp</a>&lt; ExpressionType, Direction &gt;::hnormalized</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>column or row-wise homogeneous normalization </p>
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>an expression of the first N-1 coefficients of each column (or row) of <code>*this</code> divided by the last coefficient of each column (or row).</dd></dl>
<p>This can be used to convert homogeneous coordinates to affine coordinates.</p>
<p>It is conceptually equivalent to calling <a class="el" href="group__Geometry__Module.html#gadc0e3dd3510cb5a6e70aca9aab1cbf19" title="homogeneous normalization">MatrixBase::hnormalized()</a> to each column (or row) of <code>*this</code>.</p>
<p>Example: </p><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#ga48026f4398fac445e40ef6dbef982202">Matrix4Xd</a> M = <a class="code" href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Matrix4Xd::Random</a>(4,5);</div>
<div class="line">Projective3d P(<a class="code" href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Matrix4d::Random</a>());</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;The matrix M is:&quot;</span> &lt;&lt; endl &lt;&lt; M &lt;&lt; endl &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;M.colwise().hnormalized():&quot;</span> &lt;&lt; endl &lt;&lt; M.colwise().hnormalized() &lt;&lt; endl &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;P*M:&quot;</span> &lt;&lt; endl &lt;&lt; P*M &lt;&lt; endl &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;(P*M).colwise().hnormalized():&quot;</span> &lt;&lt; endl &lt;&lt; (P*M).colwise().hnormalized() &lt;&lt; endl &lt;&lt; endl;</div>
<div class="ttc" id="agroup__matrixtypedefs_html_ga48026f4398fac445e40ef6dbef982202"><div class="ttname"><a href="group__matrixtypedefs.html#ga48026f4398fac445e40ef6dbef982202">Eigen::Matrix4Xd</a></div><div class="ttdeci">Matrix&lt; double, 4, Dynamic &gt; Matrix4Xd</div><div class="ttdoc">4×Dynamic matrix of type double.</div><div class="ttdef"><b>Definition:</b> Matrix.h:501</div></div>
</div><!-- fragment --><p> Output: </p><pre class="fragment">The matrix M is:
   0.68   0.823  -0.444   -0.27   0.271
 -0.211  -0.605   0.108  0.0268   0.435
  0.566   -0.33 -0.0452   0.904  -0.717
  0.597   0.536   0.258   0.832   0.214

M.colwise().hnormalized():
  1.14   1.53  -1.72 -0.325   1.27
-0.354  -1.13  0.419 0.0322   2.03
 0.949 -0.614 -0.175   1.09  -3.35

P*M:
  0.186  -0.589   0.369    1.33   -1.23
 -0.871  -0.337   0.127  -0.715   0.091
 -0.158 -0.0104   0.312   0.429  -0.478
  0.992   0.777  -0.373   0.468  -0.651

(P*M).colwise().hnormalized():
  0.188  -0.759  -0.989    2.85    1.89
 -0.877  -0.433  -0.342   -1.53   -0.14
  -0.16 -0.0134  -0.837   0.915   0.735

</pre><dl class="section see"><dt>See also</dt><dd><a class="el" href="group__Geometry__Module.html#gadc0e3dd3510cb5a6e70aca9aab1cbf19" title="homogeneous normalization">MatrixBase::hnormalized()</a> </dd></dl>

</div>
</div>
<a id="gaf3229c2d3669e983075ab91f7f480cb1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf3229c2d3669e983075ab91f7f480cb1">&#9670;&nbsp;</a></span>homogeneous() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; Derived &gt;::<a class="el" href="classEigen_1_1Homogeneous.html">HomogeneousReturnType</a> <a class="el" href="classEigen_1_1MatrixBase.html">Eigen::MatrixBase</a>&lt; Derived &gt;::homogeneous</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>a vector expression that is one longer than the vector argument, with the value 1 symbolically appended as the last coefficient.</dd></dl>
<p>This can be used to convert affine coordinates to homogeneous coordinates.</p>
<p>This is only for vectors (either row-vectors or column-vectors), i.e. matrices which are known at compile-time to have either one row or one column.</p>
<p>Example: </p><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#gaabb0b4639dc0b48e691e02e95873b0f1">Vector3d</a> v = <a class="code" href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Vector3d::Random</a>(), <a class="code" href="classEigen_1_1DenseCoeffsBase_3_01Derived_00_01WriteAccessors_01_4.html#af683e04b3926aaf4091581ca24ca09ad">w</a>;</div>
<div class="line">Projective3d P(<a class="code" href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Matrix4d::Random</a>());</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;v                                   = [&quot;</span> &lt;&lt; v.transpose() &lt;&lt; <span class="stringliteral">&quot;]^T&quot;</span> &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;h.homogeneous()                     = [&quot;</span> &lt;&lt; v.homogeneous().transpose() &lt;&lt; <span class="stringliteral">&quot;]^T&quot;</span> &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;(P * v.homogeneous())               = [&quot;</span> &lt;&lt; (P * v.homogeneous()).<a class="code" href="classEigen_1_1DenseBase.html#a43cbcd866a0737eb56642c2e992f0afd">transpose</a>() &lt;&lt; <span class="stringliteral">&quot;]^T&quot;</span> &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;(P * v.homogeneous()).hnormalized() = [&quot;</span> &lt;&lt; (P * v.homogeneous()).<a class="code" href="classEigen_1_1DenseBase.html#aa73e57a2f0f7cfcb4ad4d55ea0b6414b">eval</a>().hnormalized().transpose() &lt;&lt; <span class="stringliteral">&quot;]^T&quot;</span> &lt;&lt; endl;</div>
<div class="ttc" id="aclassEigen_1_1DenseBase_html_aa73e57a2f0f7cfcb4ad4d55ea0b6414b"><div class="ttname"><a href="classEigen_1_1DenseBase.html#aa73e57a2f0f7cfcb4ad4d55ea0b6414b">Eigen::DenseBase::eval</a></div><div class="ttdeci">EvalReturnType eval() const</div><div class="ttdef"><b>Definition:</b> DenseBase.h:396</div></div>
<div class="ttc" id="aclassEigen_1_1DenseCoeffsBase_3_01Derived_00_01WriteAccessors_01_4_html_af683e04b3926aaf4091581ca24ca09ad"><div class="ttname"><a href="classEigen_1_1DenseCoeffsBase_3_01Derived_00_01WriteAccessors_01_4.html#af683e04b3926aaf4091581ca24ca09ad">Eigen::DenseCoeffsBase&lt; Derived, WriteAccessors &gt;::w</a></div><div class="ttdeci">Scalar &amp; w()</div><div class="ttdef"><b>Definition:</b> DenseCoeffsBase.h:463</div></div>
<div class="ttc" id="agroup__matrixtypedefs_html_gaabb0b4639dc0b48e691e02e95873b0f1"><div class="ttname"><a href="group__matrixtypedefs.html#gaabb0b4639dc0b48e691e02e95873b0f1">Eigen::Vector3d</a></div><div class="ttdeci">Matrix&lt; double, 3, 1 &gt; Vector3d</div><div class="ttdoc">3×1 vector of type double.</div><div class="ttdef"><b>Definition:</b> Matrix.h:501</div></div>
</div><!-- fragment --><p> Output: </p><pre class="fragment">v                                   = [  0.68 -0.211  0.566]^T
h.homogeneous()                     = [  0.68 -0.211  0.566      1]^T
(P * v.homogeneous())               = [  1.27  0.772 0.0154 -0.419]^T
(P * v.homogeneous()).hnormalized() = [  -3.03   -1.84 -0.0367]^T
</pre><dl class="section see"><dt>See also</dt><dd><a class="el" href="group__Geometry__Module.html#gaf99305a3d7432318236df7b80022df37">VectorwiseOp::homogeneous()</a>, class <a class="el" href="classEigen_1_1Homogeneous.html" title="Expression of one (or a set of) homogeneous vector(s)">Homogeneous</a> </dd></dl>

</div>
</div>
<a id="gaf99305a3d7432318236df7b80022df37"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf99305a3d7432318236df7b80022df37">&#9670;&nbsp;</a></span>homogeneous() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ExpressionType , int Direction&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classEigen_1_1Homogeneous.html">Homogeneous</a>&lt; ExpressionType, Direction &gt; <a class="el" href="classEigen_1_1VectorwiseOp.html">Eigen::VectorwiseOp</a>&lt; ExpressionType, Direction &gt;::homogeneous</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>an expression where the value 1 is symbolically appended as the final coefficient to each column (or row) of the matrix.</dd></dl>
<p>This can be used to convert affine coordinates to homogeneous coordinates.</p>
<p>Example: </p><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#ga9c97aab588823ad481ba656e3e77f4af">Matrix3Xd</a> M = <a class="code" href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Matrix3Xd::Random</a>(3,5);</div>
<div class="line">Projective3d P(<a class="code" href="classEigen_1_1DenseBase.html#ae814abb451b48ed872819192dc188c19">Matrix4d::Random</a>());</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;The matrix M is:&quot;</span> &lt;&lt; endl &lt;&lt; M &lt;&lt; endl &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;M.colwise().homogeneous():&quot;</span> &lt;&lt; endl &lt;&lt; M.colwise().homogeneous() &lt;&lt; endl &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;P * M.colwise().homogeneous():&quot;</span> &lt;&lt; endl &lt;&lt; P * M.colwise().homogeneous() &lt;&lt; endl &lt;&lt; endl;</div>
<div class="line">cout &lt;&lt; <span class="stringliteral">&quot;P * M.colwise().homogeneous().hnormalized(): &quot;</span> &lt;&lt; endl &lt;&lt; (P * M.colwise().homogeneous()).colwise().hnormalized() &lt;&lt; endl &lt;&lt; endl;</div>
<div class="ttc" id="agroup__matrixtypedefs_html_ga9c97aab588823ad481ba656e3e77f4af"><div class="ttname"><a href="group__matrixtypedefs.html#ga9c97aab588823ad481ba656e3e77f4af">Eigen::Matrix3Xd</a></div><div class="ttdeci">Matrix&lt; double, 3, Dynamic &gt; Matrix3Xd</div><div class="ttdoc">3×Dynamic matrix of type double.</div><div class="ttdef"><b>Definition:</b> Matrix.h:501</div></div>
</div><!-- fragment --><p> Output: </p><pre class="fragment">The matrix M is:
   0.68   0.597   -0.33   0.108   -0.27
 -0.211   0.823   0.536 -0.0452  0.0268
  0.566  -0.605  -0.444   0.258   0.904

M.colwise().homogeneous():
   0.68   0.597   -0.33   0.108   -0.27
 -0.211   0.823   0.536 -0.0452  0.0268
  0.566  -0.605  -0.444   0.258   0.904
      1       1       1       1       1

P * M.colwise().homogeneous():
0.0832 -0.477  -1.21 -0.545 -0.452
 0.998  0.779  0.695  0.894  0.277
-0.271 -0.608 -0.895 -0.544 -0.874
-0.728 -0.551  0.202  -0.21 -0.469

P * M.colwise().homogeneous().hnormalized(): 
-0.114  0.866     -6    2.6  0.962
 -1.37  -1.41   3.44  -4.27 -0.591
 0.373    1.1  -4.43    2.6   1.86

</pre><dl class="section see"><dt>See also</dt><dd><a class="el" href="group__Geometry__Module.html#gaf3229c2d3669e983075ab91f7f480cb1">MatrixBase::homogeneous()</a>, class <a class="el" href="classEigen_1_1Homogeneous.html" title="Expression of one (or a set of) homogeneous vector(s)">Homogeneous</a> </dd></dl>

</div>
</div>
<a id="gab3f5a82a24490b936f8694cf8fef8e60"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab3f5a82a24490b936f8694cf8fef8e60">&#9670;&nbsp;</a></span>umeyama()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived , typename OtherDerived &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">internal::umeyama_transform_matrix_type&lt;Derived, OtherDerived&gt;::type Eigen::umeyama </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; Derived &gt; &amp;&#160;</td>
          <td class="paramname"><em>src</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; OtherDerived &gt; &amp;&#160;</td>
          <td class="paramname"><em>dst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>with_scaling</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns the transformation between two point sets. </p>
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><p>The algorithm is based on: "Least-squares estimation of transformation parameters between two point patterns", Shinji Umeyama, PAMI 1991, DOI: 10.1109/34.88573</p>
<p>It estimates parameters \( c, \mathbf{R}, \) and \( \mathbf{t} \) such that </p><p class="formulaDsp">
\begin{align*} \frac{1}{n} \sum_{i=1}^n \vert\vert y_i - (c\mathbf{R}x_i + \mathbf{t}) \vert\vert_2^2 \end{align*}
</p>
<p> is minimized.</p>
<p>The algorithm is based on the analysis of the covariance matrix \( \Sigma_{\mathbf{x}\mathbf{y}} \in \mathbb{R}^{d \times d} \) of the input point sets \( \mathbf{x} \) and \( \mathbf{y} \) where \(d\) is corresponding to the dimension (which is typically small). The analysis is involving the SVD having a complexity of \(O(d^3)\) though the actual computational effort lies in the covariance matrix computation which has an asymptotic lower bound of \(O(dm)\) when the input point sets have dimension \(d \times m\).</p>
<p>Currently the method is working only for floating point matrices.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">src</td><td>Source points \( \mathbf{x} = \left( x_1, \hdots, x_n \right) \). </td></tr>
    <tr><td class="paramname">dst</td><td>Destination points \( \mathbf{y} = \left( y_1, \hdots, y_n \right) \). </td></tr>
    <tr><td class="paramname">with_scaling</td><td>Sets \( c=1 \) when <code>false</code> is passed. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>The homogeneous transformation <p class="formulaDsp">
\begin{align*} T = \begin{bmatrix} c\mathbf{R} &amp; \mathbf{t} \\ \mathbf{0} &amp; 1 \end{bmatrix} \end{align*}
</p>
 minimizing the residual above. This transformation is always returned as an <a class="el" href="classEigen_1_1Matrix.html" title="The matrix class, also used for vectors and row-vectors.">Eigen::Matrix</a>. </dd></dl>

</div>
</div>
<a id="gaa0dc2c32a9379eeb2b4c4a05c1a6fe52"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa0dc2c32a9379eeb2b4c4a05c1a6fe52">&#9670;&nbsp;</a></span>unitOrthogonal()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Derived &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classEigen_1_1MatrixBase.html">MatrixBase</a>&lt; Derived &gt;::<a class="el" href="classEigen_1_1DenseBase.html#a3646a8e8b76ac3023e8e1b1340fc8238">PlainObject</a> <a class="el" href="classEigen_1_1MatrixBase.html">Eigen::MatrixBase</a>&lt; Derived &gt;::unitOrthogonal </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>This is defined in the Geometry module.</p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span> </div>
</div><!-- fragment --><dl class="section return"><dt>Returns</dt><dd>a unit vector which is orthogonal to <code>*this</code> </dd></dl>
<p>The size of <code>*this</code> must be at least 2. If the size is exactly 2, then the returned vector is a counter clock wise rotation of <code>*this</code>, i.e., (-y,x).<a class="el" href="classEigen_1_1MatrixBase.html#a5cf2fd4c57e59604fd4116158fd34308">normalized()</a>.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group__Geometry__Module.html#ga0024b44eca99cb7135887c2aaf319d28">cross()</a> </dd></dl>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Thu Apr 21 2022 13:07:55 for Eigen by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
